package org.ccay.manage.security.dao;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;

import org.apache.ibatis.annotations.Param;
import org.ccay.core.base.PageVO;
import org.ccay.core.base.PagedResult;
import org.ccay.core.request.IApplicationPrincipal;
import org.ccay.security.vo.ProgramItemsVO;
import org.ccay.security.vo.ProgramVO;

public interface IProgramDao {
	
	/**
	 * 创建数据范围
	 * @param program
	 */
	void createProgram(ProgramVO program);
	
	/**
	 * 更新数据范围
	 * @param program
	 */
	void updateProgram(ProgramVO program);

	/**
	 * 查询Program 
	 * @param programId
	 * @return 返回Program但不包括items;
	 */
	ProgramVO findProgramById(Long programId);
	
	
	/**
	 * 查询Program 
	 * @param programId
	 * @return 返回Program但不包括items;
	 */
	List<ProgramItemsVO> findProgramItemsByProgramId(Long programId);

	/**
	 * 获取Programs分页列表
	 * @param programVO
	 * @return
	 */
	PagedResult<ProgramVO> findPagedPrograms(@Param("program")ProgramVO programVO, @Param("page")PageVO page);

	/**
	 * 删除Program 并删除此Program下的权限
	 * @param programId
	 */
	void deleteProgramCascade(Long programId);
	
	/**
	 * 删除Program 被引用时报错
	 * @param programId
	 */
	void deleteProgram(Long programId);
	
	/**
	 * 数据范围名不能重复校验
	 * @param username
	 * @param userId
	 * @return
	 */
	int checkProgramNameUnique(String programName,Long programId);

	/**
	 * 数据范围是否被引用
	 * @param programId
	 * @return
	 */
	int checkReferenced(Long programId);
	
}
